import router from './router'
import store from '@/store'
// 导航守卫
router.beforeEach(async(to, from, next) => {
  // // 1.已登录
  // if (store.getters.token) {
  // // 1.1如果登录了，直接跳转到首页
  //   if (to.path === '/login') {
  //     next('/')
  //   } else {
  //     // 1.2如果其他页面直接放行
  //     // 这里就是保证有了token，而且正常放行的后面页面，就可以开始获取用户资料
  //     // 且要判断，如果store中有了就不用一直重复获取了
  //     if (!store.state.user.userInfo.userId) {
  //       await store.dispatch('user/getUserInfo')
  //     }
  //     next()
  //   }
  // } else {
  //   // 2.未登录
  //   const whiteList = ['/login', '/404', '/test']
  //   // 2.1如果页面不需要登录，直接放行
  //   if (whiteList.indexOf(to.path) !== -1) {
  //     next()
  //   } else {
  //     // 2.2如果需要登录，则跳转登录页
  //     next('/login')
  //   }
  // }

  const token = store.getters.token
  const url = to.path
  const whiteList = ['/login', '/404', '/test']

  // 1. 已登录 去登录页 -> 跳转首页
  if (token && url === '/login') {
    next('/')
  }
  // 2. 已登录 不是登录页 -> 放行
  if (token && url !== '/login') {
    if (!store.state.user.userInfo.userId) {
      await store.dispatch('user/getUserInfo')
      // 这里是登录后并拿取了用户数据
      // 需要在这里触发路由筛选
      const routes = await store.dispatch('permission/filterRoutes', store.getters.menus)
      console.log(routes)
      // router实例添加routes规则
      router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
      // 再跳一次
      next(to.path)
    } else { next() }
  }
  // 3. 未登录 在白名单 -> 放行
  if (!token && whiteList.indexOf(url) !== -1) {
    next()
  }
  // 4. 未登录 不在白名单 -> 登录页
  if (!token && whiteList.indexOf(url) === -1) {
    next('/login')
  }
})

export default router
